package main

import "fmt"

// pointer

func main() {
	// 1. &:取地址
	//格式为 变量名字 := &变量 这是根据对象取出地址
	n := 18
	p := &n
	fmt.Println(p)
	fmt.Printf("%T\n", p) // *int：int类型的指针

	// 2. *：根据地址取值
	// 取值格式 变量名字 := &指针名 根据地址取值
	m := *p
	fmt.Println(m)
	fmt.Printf("%T\n", m) // int

	//注意指针类型的是 ‘ *类型 ’
	//但是有一点指针有可能为空
	// nil pointer
	var a1 *int
	fmt.Println(a1)

	// new函数申请一个内存地址
	var a2 = new(int)
	fmt.Println(a2)
	fmt.Printf("%T\n", a2) // *int：
	fmt.Println(*a2)
	*a2 = 100
	fmt.Println(*a2)
}
